home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 July
/
EnigmA AMIGA RUN 20 (1997)(G.R. Edizioni)(IT)[!][issue 1997-07 & 08][EAR-CD IV].iso
/
earcd
/
comm
/
mmgr
/
mm_searc.lha
/
Rexx
/
MM_SearchMsgs.rexx
Wrap
OS/2 REXX Batch file
|
1997-03-15
|
10KB
|
370 lines
/*
$VER: MM_SearchMsgs 1.0 (15-3-97)
©1997 Neil Williams
*/
parse arg args
options cache
options failat 99
options results
signal on break_c
signal on break_d
signal on break_e
signal on break_f
signal on halt
signal on ioerr
signal on syntax
address 'MAILMANAGER'
Main:
call Init
call Parse_Args(strip(args))
call Header
call SearchMsgs
call Quit(0, 'All done.')
exit
break_c:; break_d:; break_e:; break_f:; halt:
signal off break_c
signal off break_d
signal off break_e
signal off break_f
signal off halt
return_code = 5
error_line = 0
error_msg = 'Execution halted!!!'
rc = 0
signal Exit
Exit:
select
when return_code>=40 then error = 'INTERNAL-ERROR:'
when return_code>=30 then error = 'IO-ERROR:'
when return_code>=20 then error = 'ERROR:'
when return_code>=10 then error = 'WARNING:'
when return_code>=5 then error = 'INFO:'
otherwise error = ''
end
call Log()
call Log('***' strip(error error_msg) '***', '+')
call Log(,'\')
call setclip('MM_LogPre', system.mm.logpre)
exit return_code
Get_Arg: procedure Expose args system.
arg keyword, mode, old
uargs = upper(args)
p = find(uargs, keyword)
if p=0 then
do
p = pos(' 'keyword'=', ' 'uargs)
if p>0 then args = overlay(' ', args, p+length(keyword))
p = find(upper(args), keyword)
end
system.cmdopt.keyword = p>0
select
when mode=0 then
if p>0 then
do
ret = 1
args = delword(args, p, 1)
end
else ret = old
when mode=1 then
if p>0 then
do
left = subword(args, 1, p-1)
rest = subword(args, p+1)
if left(rest, 1)='"' then parse var rest . '"' ret '"' rest
else parse var rest ret rest
args = strip(left strip(rest))
end
else ret = old
when mode=2 then
do
if left(args, 1)='"' then parse var args . '"' ret '"' args
else parse var args ret args
if strip(ret)='' then ret = old
end
otherwise exit 99
end
args = strip(args)
ret = strip(ret, 'b', '" ')
return ret
Get_Version: procedure
parse arg mode
parse value sourceline(3-mode) with . . ver .
parse var ver tst 'ß' .
if ~datatype(strip(tst, 'b', '/c '), 'N') then
if ~mode then ver = Get_Version(1)
else exit 99
return ver
Header:
call Log(,'/')
call Log('***' system.prg.id '***', '+')
call Log(' 'system.prg.cr)
call Log()
return
Init:
system. = 0
system.prg.ver = Get_Version(0)
system.prg.name = 'MM_SearchMsgs'
system.prg.id = system.prg.name 'v'system.prg.ver
system.prg.cfg = 'MM:Config/'system.prg.name'.cfg'
system.prg.cr = '©1997 Neil Williams'
system.tmpfile = 'T:'system.prg.name'.tmp'
system.mm.logpre = getclip('MM_LogPre')
system.prg.logpre = system.mm.logpre'|'
system.prg.loglevel = 3
call setclip('MM_LogPre', system.prg.logpre)
system.cmdopts = 'FROM/K,TO/K,SUBJECT/K,FILE/K'
call Include_Lib('rexxsupport')
return
Include_Lib: procedure Expose system.
parse arg lib, prio
if right(upper(lib), 8)~='.LIBRARY' then lib = lib'.library'
if prio='' then prio = 0
if ~show('l', lib) then
if ~addlib(lib, prio, -30, 0) then call Quit(20, 'Could not open' lib'!!!')
return
IOerr:
signal off ioerr
return_code = 20
error_line = sigl
error_msg = 'IO-error' rc 'at line' sigl '['errortext(rc)']')
rc = 0
signal Exit
Log: procedure Expose system.
parse arg text, pre, level
if ~datatype(level, 'N') then level = system.prg.loglevel
tmp = word('PRG MM', (pre~='')+1)
text = system.tmp.logpre || pre' 'text
MM_WriteLog 'text' level
return
Parse_Args: procedure Expose system.
parse arg args
tpl = system.cmdopts',?/S'
args = translate(args, ' ', '9'x'=')
pk = pos('/K', tpl)
ps = pos('/S', tpl)
select
when pk=0 & ps=0 then p = 0
when pk=0 & ps>0 then p = ps
when ps=0 & pk>0 then p = pk
otherwise p = min(pk, ps)
end
p = lastpos(',', left(tpl, p))
tpl = substr(tpl, p+1) || left(tpl, max(p-1, 0))
do while tpl~=''
parse var tpl template ',' tpl
parse var template keyword '/' .
bool = pos('/S', template)>0
key = pos('/K', template)>0
must = pos('/A', template)>0
num = pos('/N', template)>0
select
when must then system.arg.keyword = '0'x
when bool then system.arg.keyword = 0
when num then system.arg.keyword = 0
otherwise system.arg.keyword = ''
end
if bool | key then mode = ~bool
else mode = 2
system.arg.keyword = Get_Arg(keyword, mode, system.arg.keyword)
if keyword='?' & system.arg.keyword=1 then leave
if must & system.arg.keyword='0'x then
do
tmp = template 'missing!!!'
say
say ' ***' tmp '***'
signal Usage
end
if num & ~datatype(system.arg.keyword, 'N') then
if ~must & system.arg.keyword='' then system.arg.keyword = 0
else
do
tmp = 'Numeric value expected for' template', but is "'system.arg.keyword'"!!!'
say
say ' ***' tmp '***'
signal Usage
end
end
tmp = '?'; if system.arg.tmp then signal Usage
if args~='' then call Quit(10, 'Unknown option(s):' args)
/* additional checks... */
return
Quit:
parse arg return_code, error_msg
error_line = 0
rc = 0
signal Exit
Syntax:
signal off syntax
return_code = 40
error_line = sigl
error_msg = 'Syntax-error' rc 'at line' sigl '['errortext(rc)']'
rc = 0
signal Exit
Usage:
rx. = ''
rx.0.0 = '[rx] '
rx.0.1 = '[.rexx]'
m = pos('/e', system.prg.ver)>0
say
say 'Usage:' rx.m.0 || system.prg.name || rx.m.1 system.cmdopts
say
call Quit(0, 'Usage requested.')
SearchMsgs:
call open(fh,system.arg.file,"W")
drop AREAS. SEARCH. RMSG.
MM_GetAreas AREAS
do i = 0 to AREAS.COUNT-1
call Log('Searching area : 'AREAS.i)
MM_SearchMsgs AREAS.i SEARCH '"'system.arg.from'"' '"'system.arg.to'"' '"'system.arg.subject'"'
if SEARCH.COUNT ~= 0 then call Log(' ... found 'SEARCH.COUNT' messages')
else call Log(' ... no messages found')
do j = 0 to SEARCH.COUNT-1
MM_ReadMsg AREAS.i SEARCH.j RMSG
writeln(fh,' ')
writeln(fh,'-----------------------------------------------------------------------------')
writeln(fh,'From: 'RMSG.FROM' 'RMSG.FROMADDR' To: 'RMSG.TO' 'RMSG.TOADDR)
writeln(fh,'Subject: 'RMSG.SUBJ' Date: 'RMSG.DATE' AREA: 'AREAS.i)
writeln(fh,'-----------------------------------------------------------------------------')
do k = 0 to RMSG.HEAD.COUNT-1
writeln(fh,RMSG.HEAD.k)
end
do k = 0 to RMSG.TEXT.COUNT-1
writeln(fh,RMSG.TEXT.k)
end
do k = 0 to RMSG.FOOT.COUNT-1
writeln(fh,RMSG.FOOT.k)
end
writeln(fh,' ')
end /* do j */
end /* do i */
call close(fh)
return